gate algorithms